package org.dromara.llm.service.impl;

import lombok.RequiredArgsConstructor;
import org.dromara.llm.llm.ChatService;
import org.dromara.llm.service.IAITranslateService;
import org.springframework.ai.chat.messages.SystemMessage;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.messages.Message;
import org.springframework.stereotype.Service;

import java.util.List;


@RequiredArgsConstructor
@Service
public class AITranslateServiceImpl implements IAITranslateService {
    private final ChatService chatService;

    @Override
    public String translate(String message, String targetLanguage) {
        // 构建系统提示词，指导模型如何进行翻译
        String systemPrompt = """
            请你作为专业翻译工具，按以下规则处理用户需求：

            1. 核心任务：
               - 准确识别用户指定的目标语言（如中文、英语、韩语、德语、葡萄牙语、西班牙语、日语等）。
               - 完整翻译用户提供的文本，不遗漏任何内容。
            2. 翻译标准：
               - 语义精准：严格贴合原文含义，不篡改、不增删信息。
               - 表达自然：符合目标语言的日常使用习惯，避免直译导致的生硬感。
               - 风格统一：若原文带有特定语气（如正式、口语化、幽默、严肃），翻译后需保留对应风格。
               - 术语规范：涉及专业领域（如法律、医学、科技）的词汇，使用目标语言中的标准术语。

            3. 特殊处理：
               - 若文本中存在多语言混杂的情况，优先翻译非目标语言部分，目标语言内容保持原样。
            4. 显示说明：
               - 不需要多余的翻译描述信息，我只需要显示对应的翻译
            5. 翻译类型缩写
               - 中文（zh）、英语（en）、日语（ja）、韩语（ko）、法语（fr）等传参缩写
            """;
        // 构建用户消息，包含需要翻译的文本和目标语言
        String userPrompt = String.format("将以下文本翻译成%s：%s", targetLanguage, message);
        // 创建消息列表
        List<Message> messages = List.of(new SystemMessage(systemPrompt), new UserMessage(userPrompt));
        // 创建提示并生成响应
        Prompt prompt = new Prompt(messages);

        return chatService.chat(prompt);
    }

    @Override
    public String revise(String message) {
        // 构建系统提示词，指导模型如何进行翻译
        String systemPrompt = """
            请基于以下音频转文字的原始识别文本，进行全面校准与优化，具体要求如下：
            1.修正识别错误：
                - 检查并修正因音频模糊、口音、同音字 / 近音字导致的识别错误（如 “那里” 误为 “哪里”）。
                - 补充遗漏的关键信息（如人名、地名、数字、专业术语等），若无法确认可标注 “[待确认]”。
                - 删除无意义的语气词、重复内容或噪音导致的乱码（如 “嗯…… 这个……” 可简化为 “这个”）。
            2.优化文本流畅度：
                - 调整语句语序，使表达更符合书面语逻辑（如口语化的 “我昨天啊，去了趟超市” 改为 “我昨天去了趟超市”）。
                - 统一标点符号使用（如将口语中的停顿改为逗号、句号，避免一逗到底）。
                - 修正语法错误（如主谓不一致、时态混乱等）。
            3.保留核心信息完整性：
                - 确保校准后的文本不偏离原始音频的主旨、观点或事实。
                - 对于重要的强调内容、情感倾向（如疑问、感叹、否定），需通过措辞或标点准确体现。
            4.特殊场景处理：
                - 若音频包含对话，需明确区分说话人（如 “甲：……”“乙：……”）。
                - 若涉及专业领域（如医疗、法律、技术），需保证术语的准确性，必要时标注行业常用表述。
            5.返回格式：
                - 返回格式描述，不需要回显处理说明以及描述，只需要返回校准后的文本就可以了
                - 如果是明确文字意思描述的无需处理返回原文即可
            """;
        // 创建消息列表
        // 构建用户消息，包含需要翻译的文本和目标语言
        String userPrompt = String.format("将以下文本进行处理：%s", message);
        List<Message> messages = List.of(new SystemMessage(systemPrompt), new UserMessage(userPrompt));
        // 创建提示并生成响应
        Prompt prompt = new Prompt(messages);

        return chatService.chat(prompt);
    }

}
